package cjlu.ea.h.controller;


import cjlu.ea.h.common.FileUtil;
import cjlu.ea.h.common.R;
import cjlu.ea.h.entity.Byszccl;
import cjlu.ea.h.entity.DBsyxwsqb;
import cjlu.ea.h.entity.DBysfxshb;
import cjlu.ea.h.service.ByszcclService;
import cjlu.ea.h.service.F102DBsyxwsqbService;
import cjlu.ea.h.service.F103DBysfxshbService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.util.ResourceUtils;
import org.springframework.web.bind.annotation.*;

import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import org.springframework.web.multipart.MultipartFile;


import javax.activation.MimetypesFileTypeMap;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.InetAddress;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;


/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author testjava
 * @since 2022-10-05
 */
@RestController
@CrossOrigin
@RequestMapping("/h/byszccl")
@Slf4j
public class ByszcclController {

    @Autowired
    ByszcclService byszcclService;
    @Autowired
    F102DBsyxwsqbService f102DBsyxwsqbService;
    /**
     * 上传文件
     * dir 文件对应的功能文件夹例如: F102/文件名
     * id 材料对应学生的id编号
     */
    @PostMapping("uploadFile/{id}/{dir}")
    public R uploadFile(@PathVariable("id") Integer id,@PathVariable("dir") String dir,@RequestParam("file") MultipartFile multipartFile){
            try {

                if (multipartFile.isEmpty()) {
                    System.out.println("请选择文件");
                    return R.error();
                }
                // 获取文件的名称
                String originalFilename = multipartFile.getOriginalFilename();
                // 文件后缀 例如：.png
                String fileSuffix = originalFilename.substring(originalFilename.lastIndexOf("."));
                // 根据日期 生成文件名
                SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                String dateName = new SimpleDateFormat("yyyy-MM-dd").format(new Date()).toString();
                System.out.println(dateName);
                // 根路径，在 resources/static/upload
                String basePath = ResourceUtils.getURL("classpath:").getPath() + "static/upload/" + (StringUtils.isNotBlank(dir) ? (dir + "/") : "");
                // 新的文件名，使用uuid生成文件名
                String fileName = dateName+"-"+id+fileSuffix;
                // 创建新的文件
                File fileExist = new File(basePath);
                // 文件夹不存在，则新建
                if (!fileExist.exists()) {
                    fileExist.mkdirs();
                }
                // 获取文件对象
                File file = new File(basePath, fileName);
                // 完成文件的上传
                multipartFile.transferTo(file);
                System.out.println("上传成功");

                //数据库插入路径数据
                Byszccl byszccl = new Byszccl();
                byszccl.setFileName(fileName);
                byszccl.setPath(dir+"/"+fileName);
                byszccl.setBysId(id);

                byszcclService.save(byszccl);
                DBsyxwsqb dBsyxwsqb = new DBsyxwsqb();
                dBsyxwsqb.setId(id);
                dBsyxwsqb.setZccl(fileName);
                log.info("上传的材料为: {}",fileName);
                f102DBsyxwsqbService.updateById(dBsyxwsqb);
                log.info("上传成功..");

                return R.ok();
            } catch (Exception e) {
                e.printStackTrace();
            }
            return R.error();
        }

        @GetMapping("downloadFile/{id}")
        public void downloadFile(@PathVariable("id") Integer id) throws IOException {
            QueryWrapper<Byszccl> queryWrapper = new QueryWrapper();
            queryWrapper.eq("bys_id",id);
            log.info("该材料对应的学生的id为:"+id);
            String filename = byszcclService.getOne(queryWrapper).getPath();
            log.info("获取到的filename:"+filename);
            ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
            HttpServletResponse response = requestAttributes.getResponse();
            // 设置信息给客户端不解析
            String type = new MimetypesFileTypeMap().getContentType(filename);
            // 设置contenttype，即告诉客户端所发送的数据属于什么类型
            response.setHeader("Content-type",type);
            // 设置编码
            String hehe = null;
            try {
                hehe = new String(filename.getBytes("utf-8"));
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
            // 设置扩展头，当Content-Type 的类型为要下载的类型时 , 这个信息头会告诉浏览器这个文件的名字和类型。
            response.setHeader("Content-Disposition", "attachment;filename=" + hehe);
            FileUtil.download(filename, response);

        }



}

